"""训练集和测试集预处理执行脚本"""

import os
import sys
import argparse

# 动态计算项目根目录（找到包含data文件夹的顶层目录）
current_script_path = os.path.abspath(__file__)
# 从脚本路径向上追溯，直到找到包含'data'文件夹的目录作为项目根目录
project_root = current_script_path
while not os.path.exists(os.path.join(project_root, 'data')):
    project_root = os.path.dirname(project_root)
    # 防止无限循环（如果遍历到系统根目录仍未找到）
    if project_root == os.path.dirname(project_root):
        raise FileNotFoundError("未找到data文件夹，请检查项目结构")

# 将项目根目录添加到Python路径
sys.path.append(project_root)

from train_test_preprocessing.data_preprocess import DataPreprocessor

def get_default_data_path(filename: str) -> str:
    """
    动态计算数据文件的默认路径（项目根目录下的data文件夹）

    参数:
        filename: 数据文件名（如'train.csv'）

    返回:
        完整的数据文件路径
    """
    # 项目根目录下的data文件夹
    data_dir = os.path.join(project_root, 'data')
    # 确保data目录存在
    os.makedirs(data_dir, exist_ok=True)
    # 返回完整文件路径
    return os.path.join(data_dir, filename)

def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='通信网络数据集预处理工具')
    parser.add_argument('--train_path',
                      default=get_default_data_path('train.csv'),
                      help=f'训练集文件路径，默认: {get_default_data_path("train.csv")}')
    parser.add_argument('--test_path',
                      default=get_default_data_path('test.csv'),
                      help=f'测试集文件路径，默认: {get_default_data_path("test.csv")}')
    parser.add_argument('--output_train',
                      default=get_default_data_path('processed_train.csv'),
                      help=f'处理后训练集输出路径，默认: {get_default_data_path("processed_train.csv")}')
    parser.add_argument('--output_test',
                      default=get_default_data_path('processed_test.csv'),
                      help=f'处理后测试集输出路径，默认: {get_default_data_path("processed_test.csv")}')

    args = parser.parse_args()

    # 初始化预处理工具
    preprocessor = DataPreprocessor()

    try:
        # 处理训练集
        print(f"开始处理训练集，路径: {args.train_path}")
        train_df = preprocessor.preprocess_train(args.train_path)
        preprocessor.save_preprocessed_data(train_df, args.output_train)

        # 处理测试集
        print(f"开始处理测试集，路径: {args.test_path}")
        test_df = preprocessor.preprocess_test(args.test_path)
        preprocessor.save_preprocessed_data(test_df, args.output_test)

        print("所有数据预处理完成!")
    except FileNotFoundError as e:
        print(f"错误：文件不存在 - {str(e)}")
        print(f"请确保文件在该路径下，或使用--train_path/--test_path参数指定正确路径")
        sys.exit(1)
    except Exception as e:
        print(f"预处理过程出错: {str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    main()
